序列化
django-rest-framework serializer可以很方便的实现model对象的序列化,对前端传递的数据进行验证等等,功能与django原生的form很相似,但是却比form更强大,下面体验一下。
开始
安装:
1 | pip install django-rest-framework |
创建一个新django项目:1
2django-admin.py startproject rest
python manage.py startapp snippet
rest/settings.py添加app:
1 | INSTALLED_APPS = ( |
创建一个model
snippet/models.py:
1 | from django.db import models |
创建serializer.py文件:
snippet/serializer.py:
1 | from rest_framework import serializers |
创建表结构:1
2python manage.py makemigrations
python manage.py migrate
开始使用django命令行,写一些序列化测试代码:
1 | $ python manage.py shell |
同时,作为为django量身定制的框架,serializer也支持queryset的序列化(原生json模块不支持序列化queryset),在序列化的时候添加一个many = True参数即可:
1 | >>> serializer= Snippetserializer(Snippet.objects.all(),many=True) |
梳理一下:
1.model对象通过serializer方法序列化成新的对象obj,obj.data可以取出此对象的各items
2.jsonrender方法可以将obj.data渲染成byte格式对象,再通过byteIO处理可以转换成python的byte格式数据流。也可以decode成json风格str类型。
3.jsonparser方法可以将数据流(json风格str)反处理成dict格式
ModelSerializer
如modelform一样,restframework同样存在可以直接基于model关联,进行field字段关联验证等功能的模块,ModelSerializer.
改写snippet/serializer.py:
1 | from rest_framework import serializers |
写一个视图views.py,提供list查询、提交,单个对象查询、修改、删除方法:
1 | from django.http import HttpResponse |
定义urls规则关联视图函数:
urls.py:
1 | from django.conf.urls import url |
验证测试:
开启服务:
1 | python manage.py runserver |
测试:
1 | $ curl http://127.0.0.1:8000/snippets/ |
简单的接口OK了